빌드 & 배포 가이드

이 가이드는 로컬(개발자), 개발 서버, 운영 서버에서의 빌드 및 배포 명령어를 다룹니다.


사전 준비사항


1) 로컬 (개발자)

Docker 없이 앱 실행 (빠른 반복 개발)

# UnifiedService를 Gradle로 직접 실행
./gradlew :UnifiedService:bootRun

Fat JAR 빌드

./gradlew :UnifiedService:bootJar
# 출력: UnifiedService/build/libs/*.jar

Docker로 빌드 & 실행 (로컬 테스트)

# 이미지 빌드 (단일 아키텍처, 로컬)
docker build -t newsyhan/akc-b2c-unified-service:local -f UnifiedService/Dockerfile .

# 컨테이너 실행 (/uploads 볼륨 제공)
docker run --rm -p 8089:8089 \
  -e SPRING_PROFILES_ACTIVE=docker \
  -e DB_USERNAME=antsome -e DB_PASSWORD='Q1w2e3r4%^' \
  -v $(pwd)/uploads:/uploads \
  newsyhan/akc-b2c-unified-service:local

참고: 디버깅 시 로그는 콘솔로 확인하세요. 로컬 빌드에서는 호스트 로그 디렉토리를 생성하지 않아도 됩니다.


2) 개발 서버 (리소스 제약) - 권장 워크플로우

전략: 이미지를 로컬(또는 CI)에서 빌드하고 Docker Hub에 푸시한 후, 개발 서버에서 pull & 실행

빌드 & 푸시 (로컬)

# buildx builder 확인 및 생성
docker buildx create --use --name multiplatform-builder || true
docker buildx inspect --bootstrap

# 멀티 아키텍처 이미지 빌드 & 푸시
./build-and-push.sh

build-and-push.shlinux/amd64linux/arm64용으로 빌드하고 newsyhan/akc-b2c-unified-service:latest 및 타임스탬프 태그를 푸시합니다.

개발 서버에서 배포

# 개발 서버에서
cd /root/syhan/amano/akc-b2c
# 개발용 compose 사용 (로그용 tmpfs)
docker-compose -f docker-compose.unified.production.yml pull
docker-compose -f docker-compose.unified.production.yml up -d

# 상태 확인
docker-compose -f docker-compose.unified.production.yml ps
docker-compose -f docker-compose.unified.production.yml logs -f unified-service

참고:


3) 운영 서버 (로그 영구 보관, 보안)

서버 준비 (최초 1회)

# 로그 디렉토리 생성 및 소유권 설정 (컨테이너 사용자 UID 1000 가정)
sudo mkdir -p /var/log/akc-b2c
sudo chown -R 1000:1000 /var/log/akc-b2c
sudo chmod 755 /var/log/akc-b2c

# 환경 변수 예제 복사 및 수정
cp .env.production.example .env.production
# .env.production을 실제 비밀번호 및 토큰으로 수정

배포

# Pull & 실행 (운영용 compose)
docker-compose -f docker-compose.unified.prod.yml --env-file .env.production pull
docker-compose -f docker-compose.unified.prod.yml --env-file .env.production up -d

# 상태 확인
docker-compose -f docker-compose.unified.prod.yml ps
# Health Check
curl http://localhost:8089/actuator/health
# 로그 확인 (호스트)
tail -f /var/log/akc-b2c/parking-service.log

참고:


4) 롤백

새 이미지에 문제가 있는 경우 이전 이미지 태그를 사용하세요:

# 서버에서
docker pull newsyhan/akc-b2c-unified-service:20251021-<timestamp>
# compose 이미지 태그를 업데이트하거나 로컬에서 재태그
# 그런 다음 up -d로 이전 태그 실행

5) CI/CD (GitHub Actions 간단 예제)

.github/workflows/docker-build.yml을 생성하여 feature-parking에 병합 시 자동으로 빌드 및 푸시할 수 있습니다 (선택 사항; 필요시 템플릿 제공 가능).


6) 트러블슈팅


추가로 필요하시면:


생성된 파일: PROBLEMS_AND_IMPROVEMENTS.md, BUILD_GUIDE.md